package 锁;
//线程安全的解决--锁

class Text{
    static int count = 0;
    public void add(){
//        synchronized (this){
//            count++;
//        }
//
//        方法3：
        synchronized (Text.class){
            count++;
        }
    }
//    另一种写法
    synchronized public void add1(){
        count++;
    }
}
public class Demo_2 {
    public static int count = 0;
    static Object o =new Object();

    static Text text = new Text();

    public static void main(String[] args) throws InterruptedException {
//        方法1：

//        Thread thread1 = new Thread(()->{
//            for (int i = 0; i < 5_0000; i++) {
//                synchronized (o){
//                    count++;
//                }
//            }
//        });
//        Thread thread11 =new Thread(()->{
//            for (int i = 0; i < 5_0000; i++) {
//                synchronized (o){
//                    count++;
//                }
//            }
//        });

//        方法2：

//        Thread thread1 = new Thread(()->{
//            for (int i = 0; i < 5_0000; i++) {
//                text.add();
//            }
//        });
//        Thread thread11 = new Thread(()->{
//            for (int i = 0; i < 5_0000; i++) {
//                text.add();
//            }
//        });

//        方法3：
        Thread thread1 = new Thread(()->{
            for (int i = 0; i < 5_0000; i++) {
                text.add();
            }
        });
        Thread thread11 = new Thread(()->{
            for (int i = 0; i < 5_0000; i++) {
                text.add();
            }
        });

        thread1.start();
        thread11.start();


        thread1.join();
        thread11.join();

//        System.out.println("count: "+count);
//        方法2：
        System.out.println("count: "+Text.count);

    }
}
